/*
 * 描述： <描述>
 * 修改人： rain
 * 修改时间： 2016年8月12日
 * 项目： rainhy-config
 */
package com.rainhy.config.manager.xml.database;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.orm.jpa.JpaTransactionManager;

import com.rainhy.config.context.ConfigContext;
import com.rainhy.config.manager.ConfigContextParse;
import com.rainhy.config.manager.xml.BaseXMLConfigPropertiesManager;
import com.rainhy.core.util.AssertUtils;

/**
 * 数据库配置管理器<br>
 * 初始化数据以读取 xml 为准<br>
 * 
 * @author rain
 * @version [版本号, 2016年8月12日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class DatabaseXMLConfigPropertiesManager extends BaseXMLConfigPropertiesManager implements InitializingBean {
    
    /** Jpa 事务管理器 */
    private JpaTransactionManager transactionManager;
    
    // 注入的 EntityManager 事务和资源是交由 spring 容器来管理的,不用手动管理
    /** 实体管理器 */
    @PersistenceContext
    protected EntityManager entityManager;
    
    @Override
    public void afterPropertiesSet() throws Exception {
        AssertUtils.notNull(transactionManager, "在使用 spring-data-jpa 时必须注入 JpaTransactionManager.");
        AssertUtils.notNull(entityManager, "请使用 spring-data-jpa.");
    }
    
    @Override
    public boolean isSupportEditAble() {
        return true;
    }
    
    /** Jpa 事务管理器 */
    public void setTransactionManager(JpaTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    }
    
    @Override
    public void updateConfigProperty(String key, String value) {
        
    }
    
    @Override
    protected List<ConfigContextParse> loadConfig(ConfigContext configContext, String locations) {
        // 从 xml 加载配置
        List<ConfigContextParse> configContexts = super.loadConfig(configContext, locations);
        
        // 从 数据库 加载配置
        return configContexts;
    }
    
}
